Everything about The Sticky Bit totally explained
The
sticky bit is an access-right
flag that can be assigned to
files and
directories on
Unix systems.
History
The sticky bit was introduced in the
Fifth Edition of Unix in 1974 for use with pure executable files. When set, it instructed the
operating system to retain the
text segment of the program in
swap space after the
process exited. This speeded subsequent executions by allowing the kernel to make a single operation of moving the program from swap to real memory. Thus, frequently-used programs like editors would load notably faster. One notable problem with "stickied" programs was replacing the executable (for instance, during
patching); to do so required removing the sticky bit from the executable, executing the program and exiting to flush the cache, replacing the binary executable, and then restoring the sticky bit.
Currently, this behavior is only operative in
HP-UX.
Solaris appears to have abandoned this in 2005. The 4.4-Lite release of
BSD retained the old sticky bit behavior but it has been subsequently dropped from
OpenBSD (as of release 3.7) and
FreeBSD (as of release 2.2.1); it remains in
NetBSD. No version of
Linux has ever supported the traditional behavior.
| Operating System |
Excerpt from Man page |
Links |
| Solaris 10 |
If a regular file isn't executable and has bit is set on any other file, the results are unspecified. |
Solaris chmod(2) |
| HP-UX |
prevents the system from abandoning the swap-space image of the program-text portion of the file when its last user terminates. Then, when the next user of the file executes it, the text need not be read from the file system but can simply be swapped in, thus saving time. |
hp-ux chmod(2) |
| Linux |
No specific mention of sticky bit, so assumed to ignore |
Linux chmod(2) |
| FreeBSD |
The FreeBSD VM system totally ignores the sticky bit (ISVTX) for executables. |
FreeBSD chmod(2) |
| IRIX |
If the sticky bit, S_ISVTX, is set on a file that's a dynamic loader for an ELF executable, then when the executable is execed the old process's read only address spaces will be made available to the dynamic loader in the new process. This can improve program start up time considerably. The setting of the sticky bit on any other file has no effect. |
IRIX chmod(2)
|
Usage
The most common use of the
sticky bit today is on
directories, where, when set, items inside the directory can be renamed or deleted only by the item's owner, the directory's owner, or the
superuser; without the sticky bit set, any user with write and execute permissions for the directory can rename or delete contained files, regardless of owner. Typically this is set on the
/tmp directory to prevent ordinary users from deleting or moving other users' files. This feature was introduced in 4.3BSD in 1986 and today it's found in most modern Unix systems.
In addition, Solaris (as of Solaris 2.5) defines special behavior when the sticky bit is set on non-executable
files: those files, when accessed, won't be
cached by the
kernel. This is usually set on
swap files to prevent access on the file from flushing more important data from the system cache. It is also used occasionally for
benchmarking tests.
The sticky bit is also set by the
automounter to indicate that a file hasn't been mounted yet. This allows programs like
ls to ignore unmounted remote files.
The Linux kernel ignores the sticky bit on
files.
Examples
The sticky bit can be set using the
chmod command and can be set using its octal mode 1000 or by its symbol
t (
s is already used by the
setuid bit). For example, to add the bit on the directory
/usr/local/tmp, one would type
chmod +t /usr/local/tmp. Or, to make sure that directory has standard
tmp permissions, one could also type
chmod 1777 /usr/local/tmp.
In Unix symbolic
file system permission notation, the sticky bit is represented by the letter
t in the final character-place. For instance, on Solaris 8, the
/tmp directory, which by default has the sticky-bit set, shows up as:
$ ls -ld /tmp
drwxrwxrwt 4 root sys 485 Nov 10 06:01 /tmp
If the sticky-bit is set on a file or directory without the execution bit set for the
others category (non-user-owner and non-group-owner), it's indicated with a capital
T:
# ls -l test
-rw-r--r-- 1 root other 0 Nov 10 12:57 test
# chmod +t test; ls -l test
-rw-r--r-T 1 root other 0 Nov 10 12:57 test
Further Information
Get more info on 'Sticky Bit'.
|
External Link Exchanges
Do you know how hard it is to get a link from a large encyclopaedia? Well we're different and will prove it. To get a link from us just add the following HTML to your site on a relevant page:
<a href="http://sticky_bit.totallyexplained.com">Sticky bit Totally Explained</a>
Then simply click through this link from your web page. Our crawlers will verify your link, extract the title of your web page and instantly add a link back to it. If you like you can remove the words Totally Explained and embed the link in article text.
As long as your link remains in place, we'll keep our link to you right here. Please play fair - our crawlers are watching. Your site must be closely related to this one's topic. Any kind of spamming, dubious practises or removing the link will result in your link from us being dropped and, potentially, your whole site being banned. |